/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.service;

import com.model.domain.equipo.DispositivoMovil;
import com.model.domain.equipo.ModeloDispositivoMovil;
import com.model.domain.persona.Cargo;
import com.model.domain.persona.CondicionNivelEducativo;
import com.model.domain.persona.CursoEstudiado;
import com.model.domain.persona.EstadoCivil;
import com.model.domain.persona.FiltroPersonal;
import com.model.domain.persona.LenguaMaterna;
import com.model.domain.persona.NivelEducativo;
import com.model.domain.persona.Personal;
import com.model.domain.persona.SeguroPensiones;
import com.model.domain.persona.Sexo;
import com.model.domain.persona.TallaRopa;
import util.reporte.Pagina;
import com.model.domain.ubicacion.Departamento;
import com.model.domain.ubicacion.Distrito;
import com.model.domain.ubicacion.Odei;
import com.model.domain.ubicacion.Provincia;
import com.model.domain.usuario.Perfil;
import com.model.domain.usuario.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import util.StringUtil;
import util.enums.EnumUtil;
import util.excel.RegistroExcel;
import util.www.jdbc.PreparedStatementSql;
import util.www.sql.RegistroSql;
import util.www.jdbc.SeteadorJdbc;
import util.www.sql.TipoSentenciaSql;

/**
 *
 * @author Rdelacruz
 */
public class PersonalService 
extends AbstractService
{          
    private EstadoCivilService estadoCivilService;
    private PerfilService perfilService;
    private CargoService cargoService;
    private DepartamentoService departamentoService;
    private OdeiService odeiService;
    private LenguaMaternaService lenguaMaternaService;
    private CursoEstudiadoService cursoEstudiadoService;
    
    public void setearNombresApellidos(Connection con, ResultSet rs, Personal obj) throws SQLException {
        obj.setApellidoPaterno(rs.getString("APEPATERNO"));
        obj.setApellidoMaterno(rs.getString("APEMATERNO"));
        obj.setNombres(rs.getString("NOMBRE"));
    }
    
    public void setearCargo(Connection con, ResultSet rs, Personal obj) throws SQLException {
        obj.setCargo(cargoService.findByCodigo(con, rs.getString("CARGO")));
    }
    
    public List<Personal> findByFilter(Connection con, FiltroPersonal filtro) throws Exception {
        List<Personal> lista = new ArrayList<Personal>();
        
        Statement st = null;
        PreparedStatement ps = null;
        try {            
            Pagina pag = filtro.getPagina();
            
            String sqlWhere = "";
            if(filtro.getTexto()!=null) {
                if(filtro.getTipo().equals("1")) {            
                    sqlWhere = "where nombre like '%"+filtro.getTexto() +"%'"
                            + "OR APEPATERNO like '%"+filtro.getTexto() +"%' "
                            + "OR APEMATERNO like '%"+filtro.getTexto() +"%' \n";
                }
                else if(filtro.getTipo().equals("2")) {            
                    sqlWhere = "where usuario like '%"+filtro.getTexto() +"%' \n";
                }            
            }
            
            String codOdei = filtro.getOdei().getCodigo();
            if(!StringUtil.esVacioONulo(codOdei)) {
                if(sqlWhere.isEmpty())
                    sqlWhere = "where ";
                else
                    sqlWhere += "and ";

                sqlWhere += "odei='"+codOdei+"'";
            }
            
            st = con.createStatement();
            ResultSet rsCount = st.executeQuery("select count(*) from Personal "+sqlWhere);//http://stackoverflow.com/questions/192078/how-do-i-get-the-size-of-a-java-sql-resultset
            if(rsCount.next()) {
                pag.setTamahoReporte(rsCount.getInt(1));
            }
            
            String sql = "select \n" +
"nfila, dni, usuario, nombre, APEPATERNO, APEMATERNO, perfil, activo, odei \n" +
"from \n" +
"(SELECT ROW_NUMBER() OVER(order by usuario) as nfila, * from Personal\n" +
sqlWhere+                    
") Personal1\n" +
"where nfila>=? and nfila<=?";
            
            //ps = con.prepareStatement("select usuario, nombre, APEPATERNO, APEMATERNO, perfil from Personal u where u.usuario = ? and u.clave = ?");
            //ps = con.prepareStatement("select usuario, nombre, APEPATERNO, APEMATERNO, perfil, activo from Personal");
            ps = con.prepareStatement(sql);            
            ps.setInt(1, pag.getNumeroPrimeraFila());
            ps.setInt(2, pag.getNumeroUltimaFila());
                        
            ResultSet rs = ps.executeQuery();
            while(rs.next()) {                
                Personal p = new Personal();
                
                Usuario u = new Usuario();                             
                String codPerfil = rs.getString("perfil");
                //Perfil pf = perfilService.findConPermisosByCodigo(con, codPerfil);
                Perfil pf = perfilService.findByCodigo(con, codPerfil);
                u.setPerfil(pf);                
                u.setIdentificador(rs.getString("usuario"));                
                u.setActivo(rs.getBoolean("activo"));
                p.setUsuario(u);
                
                p.setNombres(rs.getString("nombre"));
                p.setApellidoPaterno(rs.getString("apepaterno"));
                p.setApellidoMaterno(rs.getString("apematerno"));                
                p.setDni(rs.getString("dni"));
                
                Odei odei = new Odei();
                odei.setCodigo(rs.getString("odei"));
                p.setOdei(odei);
                
                lista.add(p);
            }
        }
        finally {
            if(st!=null) st.close();                        
            if(ps!=null) ps.close();                        
        }
        return lista;
    }
    
    
    
    private void setearClavePorDefecto(Personal comando) throws Exception {
        
        if(comando.getFechaNacimiento()==null)
            throw new Exception("Debe indicar la fecha de nacimiento para poder generar la clave");
        
        //Por defecto la contraseña del usuario tendrá el formato “ddmmaa” de su fecha de nacimiento. 
        String[] datos = comando.getFechaNacimiento().split("/");
        StringBuilder sb = new StringBuilder();
        sb.append(datos[0]);
        sb.append(datos[1]);
        int anho = Integer.parseInt(datos[2]);
        sb.append(anho % 100);//2 ultimos digitos del año
        comando.getUsuario().setClave(sb.toString());
    }
    
    public List<RegistroExcel> findRegistrosParaExportarExcel(Connection con) throws SQLException {
        List<Personal> listaPersonal = findParaExportarExcel(con);
        List<RegistroExcel> lista = new ArrayList<RegistroExcel>();
        for(Personal p : listaPersonal) {
            RegistroExcel r = new RegistroExcel();
            r.addValor(p.getOdei().getDepartamento().getCodigo());
            r.addValor(p.getOdei().getCodigo());
            r.addValor(p.getDni());
            r.addValor(p.getApellidoPaterno());
            r.addValor(p.getApellidoMaterno());
            r.addValor(p.getNombres());
            r.addValor(p.getSexo()!=null? p.getSexo().getCodigo() : "");            
            r.addValor(p.getEdadCalculada());
            r.addValor(p.getFechaNacimiento());            
            r.addValor(p.getLugarNacimiento());
            r.addValor(p.getEstadoCivil().getCodigo());
            r.addValor(p.getCargo().getCodigo());
            r.addValor(p.getNroHijos());
            r.addValor(p.getNroHijosMenor1());
            r.addValor(p.getNroHijosEntre1_2());
            r.addValor(p.getNroHijosEntre3_5());
            r.addValor(p.getNroHijosEntre6_12());
            r.addValor(p.getNroHijosEntre13_17());
            r.addValor(p.getNroHijosMayor18());
            r.addValor(p.getDireccion());
            r.addValor(p.getDistrito().getProvincia().getCodigo());
            r.addValor(p.getDistrito().getCodigo());
            r.addValor(p.getProfesion());
            r.addValor(p.getTelefono());
            r.addValor(p.getTelefonoCelular());
            r.addValor(p.getCorreo());
            r.addValor(p.getGrupoSanguineo());
            r.addValor(p.getPeso());
            r.addValor(p.getEstatura());
            r.addValor(p.getLenguaMaterna().getCodigo());
            r.addValor(p.getOtraLenguaMaterna());
            r.addValor(EnumUtil.getLiteral(p.getTallaChaleco()));
            r.addValor(EnumUtil.getLiteral(p.getTallaPolo()));            
            r.addValor(EnumUtil.getCodigoString(NivelEducativo.class, p.getNivelEducativo()));
            r.addValor(EnumUtil.getCodigoString(CondicionNivelEducativo.class, p.getCondicionNivelEducativo()));
            r.addValor(p.getCarrera());
            r.addValor(p.getCentroEstudios());
            r.addValor(p.getAñoInicioEstudio());
            r.addValor(p.getAñoFinalEstudio());
            r.addValor(p.isTieneEstudiosComputacion(),"1","2");
            
            List<CursoEstudiado> cursos = p.getCursosLlevados();
            
            int n = 6;
            for(int i=0; i<n; i++) {
                CursoEstudiado c = null;
                
                if(i<cursos.size())
                    c = cursos.get(i);
                
                if(c!=null) {
                    r.addValor(c.getNombre());
                    r.addValor(c.getAnho());
                    r.addValor(c.getDuracionMeses());
                }
                else {
                    r.addValor("");
                    r.addValor("");
                    r.addValor("");
                }
            }
            
            r.addValor(p.getAñosExperienciaEnaho());
            r.addValor(p.getMesesExperienciaEnaho());
            r.addValor(p.isTuvoOtraExperienciaLaboral(),"1","2");
            r.addValor(p.getAñosOtraExperienciaLaboral());
            r.addValor(p.getMesesOtraExperienciaLaboral());
            r.addValor(EnumUtil.getCodigoString(SeguroPensiones.class, p.getSeguroPensiones()));
            r.addValor(p.isTuvoProblemaSalud(),"1","2");
            r.addValor(p.isProblemaGastrointestinal(),"1","2");
            r.addValor(p.isProblemaRespiratorio(),"1","2");
            r.addValor(p.isProblemaCirculatorio(),"1","2");
            r.addValor(p.isProblemaHormonal(),"1","2");
            r.addValor(p.isProblemaNeurologico(),"1","2");
            r.addValor(p.isProblemaGenitourinario(),"1","2");
            r.addValor(p.isProblemaIntervencionQuirurgica(),"1","2");
            r.addValor(p.isProblemaAlergias(),"1","2");
            r.addValor(p.isProblemaOtro(),"1","2");
            r.addValor(p.getOtroProblemaSalud());
            r.addValor(p.isPracticaDeporte(),"1","2");
            r.addValor(p.getDeportePracticado());
            
            lista.add(r);
        }
        return lista;
    }
    
    public List<Personal> findParaExportarExcel(Connection con) throws SQLException {
        List<Personal> lista = findParaExportarPDA(con);
        for(Personal p :lista) {            
            p.setOdei(odeiService.findConDepartamentoByCodigo(con, p.getOdei().getCodigo()));
        }
        return lista;
    }
    
    public List<Personal> findParaExportarPDA(Connection con) throws SQLException {
        List<Personal> lista = new ArrayList<Personal>();        
        Statement st = null;
        try { 
            st = con.createStatement();
            ResultSet rs = st.executeQuery("select * from Personal where activo=1");            
            while(rs.next()) {                                
                Personal p = new Personal();
                setearObjeto(con,rs, p);
                lista.add(p);
            }
        } finally {            
            if(st!=null) st.close();
        }        
        return lista;
    }
    
    public Personal findNombresApellidosByDni(Connection con, String dni) throws SQLException {
        SeteadorJdbc<Personal> s = new SeteadorJdbc<Personal>() {
            @Override
            public void setear(Connection con, ResultSet rs,Personal p) throws SQLException {                
                setearNombresApellidos(con,rs,p);
            }
        };                
        return findByDni(con,dni,s);
    }
    
    public Personal findByDni(Connection con, String dni) throws SQLException {
        SeteadorJdbc<Personal> s = new SeteadorJdbc<Personal>() {
            @Override
            public void setear(Connection con, ResultSet rs, Personal obj) throws SQLException {
                setearObjeto(con,rs,obj);
            }
        };                
        return findByDni(con,dni,s);
    }
    
    public Personal findByDni(Connection con, String dni, SeteadorJdbc<Personal> seteador) throws SQLException {
        if(dni!=null) {
            Statement st = null;
            try { 
                st = con.createStatement();
                ResultSet rs = st.executeQuery("select * from Personal where dni = '"+dni.trim()+"'");            
                if(rs.next()) {                                
                    Personal p = new Personal();
                    p.setDni(rs.getString("DNI"));
                    seteador.setear(con,rs,p);
                    return p;
                }
            } finally {            
                if(st!=null) st.close();
            }        
        }
        return null;
    }
    
    public boolean existeUsuario(Connection con, String identificador) throws SQLException {
        Statement st = null;
        try { 
            st = con.createStatement();
            ResultSet rs = st.executeQuery("select * from Personal where usuario = '"+identificador.trim()+"'");            
            return rs.next();
        } finally {            
            if(st!=null) st.close();
        }
    }
    
    public void eliminar(Connection con, Personal p) throws SQLException {
        Statement st = null;
        try { 
            st = con.createStatement();
            st.executeUpdate("delete Personal where dni = '"+p.getDni()+"'");            
        } finally {            
            if(st!=null) st.close();
        }
    }
    
    public void guardar(Connection con, Personal comando, Usuario usuario) throws Exception {
        setearClavePorDefecto(comando);       
        
        PreparedStatement ps = null;
        try { 
            RegistroSql r = new RegistroSql("Personal");
            setearPreparedStatementSql(r, comando);
            PreparedStatementSql sentencia = new PreparedStatementSql(TipoSentenciaSql.INSERT, r,usuario.getPermisosTabla());
            
            
            if(sentencia.tieneValores()) {
                //System.out.println("SQL="+sentencia.getSql());
                ps = con.prepareStatement(sentencia.getSql());
                sentencia.setear(ps);            
                ps.executeUpdate();
            }
            
            cursoEstudiadoService.guardar(con, comando.getCursosLlevados());
        } finally {            
            if(ps!=null) ps.close();
        }
    }
    
    public void actualizar(Connection con, Personal comando, Usuario usuario) throws Exception {
        PreparedStatement ps = null;
        try { 
            RegistroSql r = new RegistroSql("Personal");
            setearPreparedStatementSql(r, comando);
            PreparedStatementSql sentencia = new PreparedStatementSql(TipoSentenciaSql.UPDATE, r,usuario.getPermisosTabla());
            if(sentencia.tieneValores()) {
                sentencia.setWhereUpdateSql("where dni=?");
                String sql = sentencia.getSql();
                ps = con.prepareStatement(sql);
                //System.out.println("SQL="+sentencia.getSql());
                //String sql_test = sentencia.setearTest(sql)+" where dni='"+comando.getDni()+"'";
                //System.out.println("SQL="+sql_test);
                int n = sentencia.setear(ps);                
                ps.setString(n+1, comando.getDni());            
                ps.executeUpdate();
            }
            
            cursoEstudiadoService.actualizar_guardar(con, comando.getCursosLlevados());
        } finally {            
            if(ps!=null) ps.close();
        }
    }
    
    private void setearObjeto(Connection con, ResultSet rs, Personal p) throws SQLException {
        p.setDni(rs.getString("DNI"));
        p.setApellidoPaterno(rs.getString("APEPATERNO"));
        p.setApellidoMaterno(rs.getString("APEMATERNO"));
        p.setNombres(rs.getString("NOMBRE"));
        p.setFechaNacimiento(rs.getString("FECHANAC"));
        p.setLugarNacimiento(rs.getString("LugarNacimiento"));        
        p.setSexo(EnumUtil.getEnumByCodigo(Sexo.class, rs.getString("sexo")));   
        //p.setSexo(Sexo.get(rs.getInt("sexo")));   
        
        EstadoCivil ec = new EstadoCivil();
        p.setEstadoCivil(ec);
        //ec.setCodigo(rs.getInt("EstadoCivil"));
        ec.setCodigo(rs.getString("EstadoCivil"));
        
        Cargo c = new Cargo();
        p.setCargo(c);
        c.setCodigo(rs.getString("CARGO"));
        
        Departamento dpto = new Departamento();        
        dpto.setCodigo(rs.getString("DPTO"));
        
        Odei odei = new Odei();
        odei.setDepartamento(dpto);
        odei.setCodigo(rs.getString("ODEI"));
        p.setOdei(odei);
        
        Provincia prov = new Provincia();
        prov.setDepartamento(dpto);
        prov.setCodigo(rs.getString("PROV"));
        
        Distrito dist = new Distrito();
        dist.setProvincia(prov);
        dist.setCodigo(rs.getString("DIST"));
        p.setDistrito(dist);
        
        p.setDireccion(rs.getString("Direccion"));
        p.setTelefono(rs.getString("Telefono"));
        p.setTelefonoCelular(rs.getString("TelefonoCelular"));
        p.setProfesion(rs.getString("Profesion"));
        p.setCorreo(rs.getString("eMail"));
        
        p.setNroHijos(rs.getInt("NroHijos"));
        p.setNroHijosMenor1(rs.getInt("NroHijosMenor1"));
        p.setNroHijosEntre1_2(rs.getInt("NroHijos1_2"));
        p.setNroHijosEntre3_5(rs.getInt("NroHijos3_5"));
        p.setNroHijosEntre6_12(rs.getInt("NroHijos6_12"));
        p.setNroHijosEntre13_17(rs.getInt("NroHijos13_17"));
        p.setNroHijosMayor18(rs.getInt("NroHijosMayor18"));
        
        p.setGrupoSanguineo(rs.getString("GrupoSanguineo"));
        p.setPeso(rs.getBigDecimal("Peso"));
        p.setEstatura(rs.getBigDecimal("Estatura"));
        
        LenguaMaterna leng = new LenguaMaterna();
        leng.setCodigo(rs.getString("LenguaMaterna"));
        p.setLenguaMaterna(leng);
        p.setOtraLenguaMaterna(rs.getString("OtraLengua"));
                
        Usuario u = new Usuario();
        p.setUsuario(u);                
        Perfil pf = new Perfil();
        u.setPerfil(pf);
        pf.setCodigo(rs.getString("PERFIL"));
        u.setIdentificador(rs.getString("USUARIO"));
        u.setClave(rs.getString("CLAVE"));        
        u.setActivo(rs.getBoolean("ACTIVO"));
        
        DispositivoMovil movil = new DispositivoMovil();
        p.setMovil(movil);        
        ModeloDispositivoMovil mod = new ModeloDispositivoMovil();
        movil.setModelo(mod);
        mod.setCodigo(rs.getString("TipoMovil"));       
        movil.setCodigoPatrimonial(rs.getString("ControlP"));
        
        p.setAccesoMovil(rs.getBoolean("MOVIL"));
        p.setAccesoPBasico(rs.getBoolean("PBASICO"));
        p.setAccesoPFinal(rs.getBoolean("PFINAL"));
                                    
        u.setFechaAlta(rs.getString("FECHAALTA"));
        u.setFechaBaja(rs.getString("FECHABAJA"));
                
        p.setTallaChaleco(EnumUtil.getEnumByLiteral(TallaRopa.class,rs.getString("TallaChaleco")));
        p.setTallaPolo(EnumUtil.getEnumByLiteral(TallaRopa.class,rs.getString("TallaPolo")));
        
        p.setNivelEducativo(EnumUtil.getEnumByCodigo(NivelEducativo.class,rs.getString("NivelEducativo")));        
        p.setCondicionNivelEducativo(EnumUtil.getEnumByCodigo(CondicionNivelEducativo.class,rs.getString("CondicionNivel")));
        
        p.setCarrera(rs.getString("NombreCarrera"));
        p.setCentroEstudios(rs.getString("NombreCentroEstudios"));
        
        p.setAñoInicioEstudio(rs.getString("AñoInicioEstudios"));
        p.setAñoFinalEstudio(rs.getString("AñoFinalEstudios"));
        
        p.setFechaObtencionGrado(rs.getString("FechaObtencionGrado"));
        p.setTieneEstudiosComputacion(rs.getBoolean("EstudiosComputacion"));
        
        p.setAñosExperienciaEnaho(rs.getInt("AñoExperienciaEnaho"));
        p.setMesesExperienciaEnaho(rs.getInt("MesesExperienciaEnaho"));
                
        p.setTuvoOtraExperienciaLaboral(rs.getBoolean("OtraExperienciaLaboral"));
        p.setAñosOtraExperienciaLaboral(rs.getInt("OtraExperienciaAño"));
        p.setMesesOtraExperienciaLaboral(rs.getInt("OtraExperienciaMes"));
        
        p.setSeguroPensiones(EnumUtil.getEnumByCodigo(SeguroPensiones.class,rs.getString("SeguroPensiones")));
        
        p.setFechaReferenciaSalud(rs.getString("FechaReferenciaSalud"));        
        p.setTuvoProblemaSalud(rs.getBoolean("ProblemaSalud"));
        
        p.setProblemaGastrointestinal(rs.getBoolean("Problema_Gastrointestinal"));
        p.setProblemaRespiratorio(rs.getBoolean("Problema_Respiratorio"));
        p.setProblemaCirculatorio(rs.getBoolean("Problema_Circulatorio"));
        p.setProblemaHormonal(rs.getBoolean("Problema_Hormonal"));
        p.setProblemaNeurologico(rs.getBoolean("Problema_Neurologico"));
        p.setProblemaGenitourinario(rs.getBoolean("Problema_Genitourinario"));
        p.setProblemaIntervencionQuirurgica(rs.getBoolean("Problema_intervencion_quirurgica"));
        p.setProblemaAlergias(rs.getBoolean("Problema_Alergias"));
        p.setProblemaOtro(rs.getBoolean("Problema_Otro"));
        p.setOtroProblemaSalud(rs.getString("Otro_Problema_Salud"));
        
        p.setPracticaDeporte(rs.getBoolean("PracticaDeporte"));
        p.setDeportePracticado(rs.getString("NombreDeporte"));
        
        p.setCursosLlevados(cursoEstudiadoService.findByDni(con,p.getDni()));
    }
    
    private void setearPreparedStatementSql(RegistroSql r, Personal comando) throws Exception {
        Usuario u = comando.getUsuario();
        r.agregarClave("DNI",comando.getDni());
        r.agregar("APEPATERNO",comando.getApellidoPaterno());
        r.agregar("APEMATERNO",comando.getApellidoMaterno());
        r.agregar("NOMBRE",comando.getNombres());
        r.agregar("FECHANAC",comando.getFechaNacimiento());
        r.agregar("LugarNacimiento",comando.getLugarNacimiento());
        r.agregar("Sexo", EnumUtil.getCodigoString(Sexo.class, comando.getSexo()));
        r.agregar("EstadoCivil",comando.getEstadoCivil().getCodigo());
        r.agregar("CARGO",comando.getCargo().getCodigo());
        r.agregar("DPTO",comando.getOdei().getDepartamento().getCodigo());
        r.agregar("ODEI",comando.getOdei().getCodigo());
        r.agregar("PROV",comando.getDistrito().getProvincia().getCodigo());
        r.agregar("DIST",comando.getDistrito().getCodigo());
        r.agregar("Direccion",comando.getDireccion());
        r.agregar("Telefono",comando.getTelefono());
        r.agregar("TelefonoCelular",comando.getTelefonoCelular());
        r.agregar("Profesion",comando.getProfesion());
        r.agregar("eMail",comando.getCorreo()); 
        
        r.agregar("NroHijos",comando.getNroHijos());
        r.agregar("NroHijosMenor1",comando.getNroHijosMenor1());
        r.agregar("NroHijos1_2",comando.getNroHijosEntre1_2());
        r.agregar("NroHijos3_5",comando.getNroHijosEntre3_5());
        r.agregar("NroHijos6_12",comando.getNroHijosEntre6_12());
        r.agregar("NroHijos13_17",comando.getNroHijosEntre13_17()); 
        r.agregar("NroHijosMayor18",comando.getNroHijosMayor18());
        
        r.agregar("GrupoSanguineo",comando.getGrupoSanguineo());
        r.agregar("Peso",comando.getPeso());
        r.agregar("Estatura",comando.getEstatura());
        
        r.agregar("LenguaMaterna",comando.getLenguaMaterna().getCodigo());
        r.agregar("OtraLengua",comando.getOtraLenguaMaterna());
        
        r.agregar("PERFIL",comando.getUsuario().getPerfil().getCodigo());            
        r.agregar("USUARIO",u.getIdentificador());       
        r.agregar("CLAVE",u.getClave());                  
        r.agregar("ACTIVO",u.isActivo());
        r.agregar("TipoMovil",comando.getMovil().getModelo().getCodigo());            
        r.agregar("ControlP",comando.getMovil().getCodigoPatrimonial());
        
        r.agregar("MOVIL",comando.isAccesoMovil());
        r.agregar("PBASICO",comando.isAccesoPBasico());
        r.agregar("PFINAL",comando.isAccesoPFinal());
        
        r.agregar("FECHAALTA",u.getFechaAlta());
        r.agregar("FECHABAJA",u.getFechaBaja());
        
        if(comando.getTallaChaleco()!=null)
            r.agregar("TallaChaleco",comando.getTallaChaleco().name());
        
        if(comando.getTallaPolo()!=null)
            r.agregar("TallaPolo",comando.getTallaPolo().name());
        
        
        r.agregar("NivelEducativo",EnumUtil.getCodigoString(NivelEducativo.class, comando.getNivelEducativo()) );
        r.agregar("CondicionNivel",EnumUtil.getCodigoString(CondicionNivelEducativo.class, comando.getCondicionNivelEducativo()) );
        //sentencia.agregar("NivelEducativo",comando.getNivelEducativo().getCodigo());
        //sentencia.agregar("CondicionNivel",comando.getCondicionNivelEducativo().getCodigo());
        
        r.agregar("NombreCarrera",comando.getCarrera());
        r.agregar("NombreCentroEstudios",comando.getCentroEstudios());
        
        r.agregar("AñoInicioEstudios",comando.getAñoInicioEstudio());
        r.agregar("AñoFinalEstudios",comando.getAñoFinalEstudio());
        
        //Antes: FechaUltimoGrado
        r.agregar("FechaObtencionGrado",comando.getFechaObtencionGrado());
        r.agregar("EstudiosComputacion",comando.isTieneEstudiosComputacion());
                        
        //CURSO: se guardan aparte
        //for(int i=1; i<=CursoLlevado.NRO_MAX_CURSOS; i++) {            
        //}                           
        
        r.agregar("AñoExperienciaEnaho",comando.getAñosExperienciaEnaho());
        r.agregar("MesesExperienciaEnaho",comando.getMesesExperienciaEnaho());
        
        r.agregar("OtraExperienciaLaboral",comando.isTuvoOtraExperienciaLaboral());             
        r.agregar("OtraExperienciaAño",comando.getAñosOtraExperienciaLaboral());
        r.agregar("OtraExperienciaMes",comando.getMesesOtraExperienciaLaboral());
        
        r.agregar("SeguroPensiones",EnumUtil.getCodigoString(SeguroPensiones.class, comando.getSeguroPensiones()));
        //sentencia.agregar("SeguroPensiones",comando.getSeguroPensiones().getCodigo());
        
        r.agregar("FechaReferenciaSalud",comando.getFechaReferenciaSalud());
        r.agregar("ProblemaSalud",comando.isTuvoProblemaSalud());
        
        r.agregar("Problema_Gastrointestinal",comando.isProblemaGastrointestinal());
        r.agregar("Problema_Respiratorio",comando.isProblemaRespiratorio());
        r.agregar("Problema_Circulatorio",comando.isProblemaCirculatorio());
        r.agregar("Problema_Hormonal",comando.isProblemaHormonal());
        r.agregar("Problema_Neurologico",comando.isProblemaNeurologico());
        r.agregar("Problema_Genitourinario",comando.isProblemaGenitourinario());
        r.agregar("Problema_intervencion_quirurgica",comando.isProblemaIntervencionQuirurgica());
        r.agregar("Problema_Alergias",comando.isProblemaAlergias());
        r.agregar("Problema_Otro",comando.isProblemaOtro());
        r.agregar("Otro_Problema_Salud",comando.getOtroProblemaSalud());
        
        r.agregar("PracticaDeporte",comando.isPracticaDeporte());
        r.agregar("NombreDeporte",comando.getDeportePracticado());
         
    }
    
    


    public PerfilService getPerfilService() {
        return perfilService;
    }

    public void setPerfilService(PerfilService perfilService) {
        this.perfilService = perfilService;
    }

    public EstadoCivilService getEstadoCivilService() {
        return estadoCivilService;
    }

    public void setEstadoCivilService(EstadoCivilService estadoCivilService) {
        this.estadoCivilService = estadoCivilService;
    }

    public CargoService getCargoService() {
        return cargoService;
    }

    public void setCargoService(CargoService cargoService) {
        this.cargoService = cargoService;
    }

    public DepartamentoService getDepartamentoService() {
        return departamentoService;
    }

    public void setDepartamentoService(DepartamentoService departamentoService) {
        this.departamentoService = departamentoService;
    }

    public OdeiService getOdeiService() {
        return odeiService;
    }

    public void setOdeiService(OdeiService odeiService) {
        this.odeiService = odeiService;
    }

    public LenguaMaternaService getLenguaMaternaService() {
        return lenguaMaternaService;
    }

    public void setLenguaMaternaService(LenguaMaternaService lenguaMaternaService) {
        this.lenguaMaternaService = lenguaMaternaService;
    }

    public CursoEstudiadoService getCursoEstudiadoService() {
        return cursoEstudiadoService;
    }

    public void setCursoEstudiadoService(CursoEstudiadoService cursoEstudiadoService) {
        this.cursoEstudiadoService = cursoEstudiadoService;
    }

    

    

}
